--test.lua
local skynet = require("module_a")
require('module_b')
print(skynet.name)      --已经被改变为'zxm'

--[[
require 加载策略
1 首先查找package.loaded表，检测是否被加载过。如果被加载过，require返回保存的值，
这个值在哪里被保存后面会讲到。否则进行下面的为模块寻找加载器。

2 加载器在package的searchers表中，共有四个加载器。require也按照顺序来执行加载器。
找到了就成功返回，没有就继续查找。
a   预加载器，执行package.preload[modname]，一些特殊模块会有预加载器。
b  lua加载器查找前面介绍的package.path
c  c加载器查找package.cpath
d  一体化加载器

    require('mod')成功，则在package.loaded['mod']中记录该模块。
    如果该模块没有返回值则package.loaded['mod']==true,有返回值则记录的是其返回值。
--mode_a.lua
local skynet = {
	name = 'shonm'
}
skynet.name = 'tcj'
return skynet
-----------
--mode_b.lua
local skynet = require('mode_a')
skynet.age = 21
skynet.name = 'zxm'
return skynet
-----------
--test.lua

require('mode_b')
local skynet = require("mode_a")
--再次加载时，不会执行mode_a的代码，因为上面已经执行过，只从package.loaded['mode_a']中获得table的值
print(skynet.name)      --仍然是'zxm'
]]